package com.wk.job.heartbeat.slave;

import com.wk.job.Job;
import com.wk.job.heartbeat.JobStateHeartbeat;
import com.wk.net.heartbeat.source.HeartbeatMaker;

public class JobStateHeartbeatMaker implements HeartbeatMaker<JobStateHeartbeat> {
	/**
	 * 监视当前正在进行的任务的状态并生成心跳信号
	 * 
	 * @param observedJob
	 *            被监视的任务<br>
	 *            可以为null，表示当前没有正在进行的任务
	 */
	public JobStateHeartbeatMaker(Job observedJob) {
		this.observedJob = observedJob;
	}

	/**
	 * 更换所监视的任务
	 * 
	 * @param job
	 *            被监视的任务<br>
	 *            可以为null，表示当前没有正在进行的任务
	 */
	public void observe(Job job) {
		observedJob = job;

	}

	@Override
	public JobStateHeartbeat make() {
		if (observedJob != null) {
			return new JobStateHeartbeat(observedJob.getId(), observedJob.getJobInfo(), observedJob.isFailed());
		} else {
			return new JobStateHeartbeat();
		}
	}

	private Job observedJob;// 被监视的任务。可能和其他线程共享该对象，故访问时要加锁
}
